home *** CD-ROM | disk | FTP | other *** search
- {
- > I am looking for some source code that will trap Control-Alt-Del,
- > Control-C, and Control-Break, prefered if it can be loaded into
- > the Config.sys, but autoexec.bat would work also.
-
- The compiled code can be loaded from the DOS prompt or
- from any batch. To avoid the message just redirect output
- to the nul device:
-
- breaknot > nul
- }
-
- {$F+} {Far procedures...}
- {$M 2048,0,0}
-
- Program BreakNot;
- {---------------------------------------------------------------}
- { This TSR code intercepts hardware interrupt $9 and checks for }
- { Ctrl-C, Ctrl-Break and Ctrl-Alt-Del. If none of these key }
- { combinations has been pressed the preceeding Int 9 is chained,}
- { otherwise, the keyboard is reset without calling the previous }
- { keyboard vector. Interrupt vectors $1B and $23 are not }
- { redirected. Rebooting is the only way to unload the TSR and }
- { re-enable breaks. }
- { Note: usual disclaimers apply: use at own risk, etc... }
- { - Copyright (c) 1994 Jose Campione 1:163/513.3 - }
- {---------------------------------------------------------------}
-
- Uses DOS;
-
- Var
- KbdStat: byte absolute $0000:$0417;
- KbdPort: byte;
- OldKBD : pointer;
-
- procedure JmpOldISR(OldISR: pointer);
- { ------------------------------------------------}
- { Standard Inline code to Jump from an ISR to the }
- { vector being passed. Origin: an old Critical }
- { Interrupt handler. Note: Merely rewriting this }
- { inline code as an Assembler procedure will not }
- { work -Jose- }
- {-------------------------------------------------}
- inline($5B/$58/$87/$5E/$0E/$87/$46/$10/$89/
- $EC/$5D/$07/$1F/$5F/$5E/$5A/$59/$CB);
-
- procedure ResetKbd; assembler;
- {---------------------------------------}
- { Standard code to reset the keyboard }
- { Origin: N. Rubenking's book on TP 6.0 }
- {---------------------------------------}
- asm
- in AL,$61 {read keyboard controller}
- mov AH, AL
- or AL,$80 {set the "reset bit"}
- out $61, AL {send it out}
- xchg AH, AL {get original value}
- out $61, AL {send it out}
- cli {disable interrupts}
- mov AL,$20 {EOI, end-of-interrupt signal}
- out $20, AL {send EOI to programmable interrupt controller}
- sti {enable interrupts}
- end;
-
- procedure Key_ISR; interrupt;
- begin
- KbdPort:= 0;
- KbdPort:= port[$60];
- if (((KbdStat and 4) = 4) and (KbdPort in [46,70])) or
- (((KbdStat and 12) = 12) and (KbdPort = 83)) then
- ResetKbd {reset Kbd w/o chaining int 9}
- else
- JmpOldISR( OldKBD ); {jump to Old Keyboard handler }
- end;
-
- Begin
- writeln(' BreakNot! Copyright (c) 1994, J.Campione');
- writeln(' Ctrl-C, Ctrl-Break and Ctrl-Alt-Del are now disabled');
- writeln(' To re-enable breaks, reset or restart the computer');
- GetIntVec(9,OldKBD);
- SetIntVec(9,@Key_ISR);
- Keep(0);
- End.